package mundo;

import java.util.ArrayList;

import servivos.SerVivo;
import servivos.animais.AranhaGigante;

/**
 *	Essa é a classe principal
 *	Els possui a main() e o loop do tempo 
 */
public class Principal {

	
	public static void main(String[] args) {
		// final é igual ao const do C
		final int TEMPO_TOTAL = 100;
		
		// ArrayList é uma colleção, parecida com os arrays em C que já conhecemos
		// nesse caso, estou criando um ArrayList que pode conter objetos da classe SerVivo
		ArrayList<SerVivo> habitantes = new ArrayList<SerVivo>();
		
		// vamos começar com duas aranhas e ver o que acontece?
		habitantes.add(new AranhaGigante());
		habitantes.add(new AranhaGigante());
		
		// for para o tempo total
		for(int i = 0; i < TEMPO_TOTAL; i++)
		{
			System.out.println("Dia " + i + " ===== "
								+ "População: " + habitantes.size() );
			
			ArrayList<SerVivo> novosHabitantes = new ArrayList<SerVivo>();
			ArrayList<SerVivo> mortos = new ArrayList<SerVivo>();
			
			// isso é um foreach -- o que está dizendo aqui é:
			// para cada SerVivo da coleção habitantes
			for (SerVivo serVivo : habitantes) {
				// gero os filhotes e aciono na arraylist de novos habitantes
				// note que usamos aqui addAll para acionar uma coleção de seres vivos
				novosHabitantes.addAll(serVivo.gerarDescendentes());
				
				// agora envelhecemos um dia dele
				serVivo.envelhecerUmDia();
				
				//agora vemos se ele morreu, se sim adicionamos ao vetor de mortos
				if(!serVivo.estaVivo())
				{
					mortos.add(serVivo);
				}
			}
			
			// somente agora eu tiro so mortos do vetor e adiciono os novos habitantes
			// se eu tentasse dentro do loop foreach ia dar pau pq ia tá mudando o conteudo do arraylist
			habitantes.removeAll(mortos);
			habitantes.addAll(novosHabitantes);
			
		}
	}
}
